<?php
visit_limit();

class LeapHash {
	static private $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
	static private $ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
	static private $key = 'leaphp framework secret';

	static public function SecretKey($key) {
		if (!empty($key)) {
			self::$key = $key;
		}
	}

	static public function Encrypt($txt) {
		$nh1 = rand(0,64);
		$nh2 = rand(0,64);
		$nh3 = rand(0,64);
		$ch1 = self::$chars{$nh1};
		$ch2 = self::$chars{$nh2};
		$ch3 = self::$chars{$nh3};
		$nhnum = $nh1 + $nh2 + $nh3;
		$knum = 0;$i = 0;
		while(isset(self::$key{$i})) $knum +=ord(self::$key{$i++});
		$mdKey = substr(md5(md5(md5(self::$key.$ch1).$ch2.self::$ikey).$ch3),$nhnum%8,$knum%8 + 16);
		$txt = base64_encode($txt);
		$txt = str_replace(array('+','/','='),array('-','_','.'),$txt);
		$tmp = '';
		$j=0;$k = 0;
		$tlen = strlen($txt);
		$klen = strlen($mdKey);
		for ($i=0; $i<$tlen; $i++) {
			$k = $k == $klen ? 0 : $k;
			$j = ($nhnum+strpos(self::$chars,$txt{$i})+ord($mdKey{$k++}))%64;
			$tmp .= self::$chars{$j};
		}
		$tmplen = strlen($tmp);
		$tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0);
		$tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0);
		$tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0);
		return $tmp;
	}

	static public function Decrypt($txt) {
		$knum = 0;$i = 0;
		$tlen = strlen($txt);
		while(isset(self::$key{$i})) $knum +=ord(self::$key{$i++});
		$ch1 = $txt{$knum % $tlen};
		$nh1 = strpos(self::$chars,$ch1); 
		$txt = substr_replace($txt,'',$knum % $tlen--,1);
		$ch2 = $txt{$nh1 % $tlen};
		$nh2 = strpos(self::$chars,$ch2);
		$txt = substr_replace($txt,'',$nh1 % $tlen--,1);
		$ch3 = $txt{$nh2 % $tlen};
		$nh3 = strpos(self::$chars,$ch3);
		$txt = substr_replace($txt,'',$nh2 % $tlen--,1);
		$nhnum = $nh1 + $nh2 + $nh3;
		$mdKey = substr(md5(md5(md5(self::$key.$ch1).$ch2.self::$ikey).$ch3),$nhnum % 8,$knum % 8 + 16);
		$tmp = '';
		$j=0; $k = 0;
		$tlen = strlen($txt);
		$klen = strlen($mdKey);
		for ($i=0; $i<$tlen; $i++) {
			$k = $k == $klen ? 0 : $k;
			$j = strpos(self::$chars,$txt{$i})-$nhnum - ord($mdKey{$k++});
			while ($j<0) $j+=64;
			$tmp .= self::$chars{$j};
		}
		$tmp = str_replace(array('-','_','.'),array('+','/','='),$tmp);
		return base64_decode($tmp);
	}

}



